package top100;

/**
 * @see <a href="https://leetcode.cn/problems/move-zeroes/submissions/515392117/">moveZeroes</a>
 */
public class _0283_moveZeroes {
    public static void main(String[] args) {

    }

    /**
     * 两次遍历
     *
     * 我们创建两个指针 i 和 not_zero_pos，
     * 第一次遍历的时候指针 not_zero_pos 用来记录当前有多少 非0 元素。
     * 即遍历的时候每遇到一个 非0 元素就将其往数组左边挪，
     *
     * 第一次遍历完后，not_zero_pos 指针的下标就指向了最后一个 非0 元素下标。
     * 第二次遍历的时候，起始位置就从 not_zero_pos 开始到结束，将剩下的这段区域内的元素全部置为 0。
     */
    public void moveZeroes(int[] nums) {
        if (nums == null || nums.length == 0) {
            return;
        }

        int k = nums.length;
        // 第一次遍历的时候，not_zero_pos 指针记录非0的个数，只要是非0的统统都赋给nums[not_zero_pos]。
        // not_zero_pos 是 记录非0 数字的指针位置
        int not_zero_pos = 0;
        for (int i = 0; i< k; i++) {
            if (nums[i] != 0) {
                // 非0 ， 则移动到 pos 位置
                nums[not_zero_pos++] = nums[i];
            }
        }

        // 非0元素统计完了，剩下的都是0了， 所以第二次遍历把末尾的元素都赋为0即可。 not_zero_pos 之后的，全为0了
        for (int i = not_zero_pos; i<k; i ++) {
            nums[i] = 0;
        }
    }
}
